<?php

/**
 * Permet de faire la liaison entre un objet model message et sa persistance en bd 
 */
class ZendChat_Model_MessageMapper {

    protected $_dbTable;

    /**
     * Fixe la db-table associé au user
     * @param type $dbTable
     * @return \ZendChat_Model_UserMapper
     * @throws Exception 
     */
    public function setDbTable($dbTable) {
        if (is_string($dbTable)) {
            $dbTable = new $dbTable();
        }
        if (!$dbTable instanceof Zend_Db_Table_Abstract) {
            throw new Exception('Invalid table data gateway provided');
        }
        $this->_dbTable = $dbTable;
        return $this;
    }

    /**
     * Retourne la db-table utilisé pour le persistance des users
     * @return ZendChat_Model_DbTable_User 
     */
    public function getDbTable() {
        if (null === $this->_dbTable) {
            $this->setDbTable('ZendChat_Model_DbTable_Message');
        }
        return $this->_dbTable;
    }

    /**
     * Permet de sauvegarder un nouvel user ou de le mettre à jouur s'il existe
     * déjà en base de données
     * @param ZendChat_Model_User $user 
     */
    public function save(ZendChat_Model_Message $message) {
        $data = array(
            'user_login' => $message->getUserlogin(),
            'text' => $message->getText(),
            'date' => $message->getDate()
        );

        if (($id = $message->getId()) === NULL) {
            $id = $this->getDbTable()->insert($data);
            $message->setId($id);
        } else {
            $this->getDbTable()->update($data, array('id = ?' => $id));
        }
    }

    /**
     * Retourne tous les messages enregistrés
     * @return type 
     */
    public function getAll() {
        $resultSet = $this->getDbTable()->fetchAll();
        $messages = array();
        foreach ($resultSet as $row) {
            $message = new ZendChat_Model_Message();
            $message->setUserLogin($row->user_login);
            $message->setDate($row->date);
            $message->setText($row->text);
            
            $messages[] = $message;
        }
        return $messages;
    }

}

